perm filename HASH.LST[S1,ALS] blob sn#419040 filedate 1979-02-18 generic text, type T, neo UTF8
PASCAL COMPILATION LIST PRODUCED BY PASCAL VERSION FROM 30-DEC-76 ON 18-FEB-79  AT 09:58:36  

   10   COMMENT    VALID 00004 PAGES
   20   C REC  PAGE   DESCRIPTION
   30   C00001 00001
   40   C00002 00002    (*PROGRAM HEADER PAGE*)
   50   C00005 00003    PROGRAM PRINTHASH (INPUT,OUTPUT)
   60   C00008 00004    FUNCTION OPC_HASH (VAR MNEM :  CHAR4) :  INTEGER
   70   C00015 ENDMK
   80   C;
   90   (*PROGRAM HEADER PAGE*)
  100   
  110   (*PAS10 OPTIONS*) (*$D+,R32,S1300*)                     (*X10S1*)
  120   
  130   (*                                                           DEFAULT
  140   
  150   D+      DEBUG AND POSTMORTEM DUMP                               -
  160   E+      EXTERNAL CALLS TO LEVEL 1 PROCEDURES ALLOWED            -
  170   FN      FILE OPTION                                             1
  180   I+      FORTRAN I/O IN EXTERNAL FORTRAN SUBROUTINES             -
  190   L+      OBJECT LISTING                                          -
  200   RN      SIZE OF LOW-SEGMENT                             (SEE PAS10 MANUAL)
  210   SN      MAX INSTRUCTIONS PER STATEMENT                         1000
  220   T+      RUNTIME CHECK                                           +
  230   U+      72 COLUMN FORMAT                                        -
  240   XN      HIGHEST REGISTER FOR PARAMETERS                         6
  250   *)
  260   
  270   (*SLAC PCPASC OPTIONS*) (* B+,D+,M-*)
  280   
  290   (*                                                           DEFAULT
  300   
  310   A+      GENERATE 370 OBJECT MODULE                              -
  320   A-      GENERATE 370 ASSEMBLY MODULE
  330   B+      BOUNDS CHECKING, BUT ALLOW 'BIG' CHARACTERS             -
  340   C+      EMIT PCODE                                              +
  350   D+      RUNTIME CHECKING OF POINTER, INDEX, SUBRANGE VALUES     -
  360   E+      FILE IS IN EBCDIC CHARACTER SET                         -
  370   F+      SAVE FPR'S ON PROCEDURE/FUNCTION ENTRY                  +
  380   K+      ENABLE STATEMENT EXECUTION COUNTING                     -
  390   L+      LIST SOURCE PROGRAM                                     +
  400   M+      72 COLUMN FORMAT                                        +
  410   P+      DOUBLE-WORD BOUNDARY ALIGNMENT                          -
  420   S+      SAVE GPR'S ON PROCEDURE/FUNCTION ENTRY                  +
  430   T+      PRINT SYMBOL TABLES (FOR POST-PROCESSOR)                -
  440   U+      GET STATISTICS?? 2ND PARAMETER TO PCODE BGN INSTR.      -
  450   V+      ?? 3RD PCODE BGN INSTRUCTION PARAMETER                  -
  460   X+      USE ACTUAL PROCEDURE NAMES FOR EXTERNAL REFERENCES      -
  470   X-      GENERATE UNIQUE 8-CHAR NAMES FOR EXTERNAL REFERENCES
  480   *)
  490   
  500   (*S1 PCPASC OPTION DIFFERENCES*) (* A+,B+,D+,L-,M120*)  (*X10S1*)
  510   
  520   
  530   
  540   (*                                                           DEFAULT
  550   
  560   A+      GENERATE S1 ASSEMBLY MODULE                             -
  570   A-      GENERATE S1 OBJECT MODULE
  580   *)
  590   
  600   (* SLAC/PDP-10 TRANSPORT DEPENDENCIES FLAGGED WITH "XSL10" *)
  610   (* PDP-10/S-1 TRANSPORT DEPENDENCIES FLAGGED WITH "X10S1" *)
  620   PROGRAM PRINTHASH (INPUT,OUTPUT);
  630   
  640   CONST
  650   (*OPCHTSIZE = 197;
  660   OPCHTSIZEM1 = 196;*)
  670   OPCHTSIZE = 223;
  680   OPCHTSIZEM1 = 222; 
  690   (*OPCHTSIZE = 239; 
  700   OPCHTSIZEM1 = 238;*)
  710   MAX = 2000000;
  720   
  730   TYPE
  740   CHAR4 = PACKED ARRAY [1..4] OF CHAR;
  750   U_OPCODE = ( U  ,
  760       UABS , UADD , UAND , UBGN , UCHKF, UCHKH, UCHKL, UCHKN,
  770       UCHKT, UCHR , UCLAB, UCOMM, UCSP , UCUP , UDEAD, UDEC ,
  780       UDEF , UDIF , UDIV , UDMD , UDOA , UDUP , UEND , UENT ,
  790       UEQU , UFJP , UFLO , UFLT , UGEQ , UGRT , UIEQU, UIGEQ,
  800       UIGRT, UILEQ, UILES, UINC , UIND , UINEQ, UINN , UINT ,
  810       UIOR , UIXA , ULAB , ULCA , ULDA , ULDC , ULEQ , ULES ,
  820       ULEX , ULIVE, ULOC , ULOD , UMDEF, UMOD , UMOV , UMPY ,
  830       UMST , UMUS , UNEG , UNEQ , UNEW , UNOT , UNSTR, UODD ,
  840       UORD , UOPTN, UPAR , UPLOD, UPSTR, URET , USGS , USQR ,
  850       USTO , USTP , USTR , USUB , USWP , USYM , UTJP , UTRC ,
  860       UTYP , UUJP , UUNI , UUNK , UXJP );
  870   
  880   VAR
  890       I : 0..OPCHTSIZEM1;
  900       H : 0..OPCHTSIZEM1;
  910       J : INTEGER;
  920       K : INTEGER;
  930       M1,M2,M3,M4 : INTEGER;
  940       OPC :  U_OPCODE;
  950       MNEM :  CHAR4;                                              (*7FEB79 ALS*)
  960   
  970       OPCHASHTAB :  ARRAY [0..OPCHTSIZEM1] OF
  980                           RECORD
  990                           OPCNAM :  CHAR4;
 1000                           OPC :  U_OPCODE;
 1010                           HIT : INTEGER
 1020                           END (*OPCHASHTAB*);
 1030   
 1040   FUNCTION OPC_HASH (VAR MNEM :  CHAR4) :  INTEGER;
 1050       BEGIN
 1060       OPC_HASH :=(((ORD(MNEM[1])*M1 + ORD(MNEM[2]))*M2 + ORD(MNEM[3]))*M3
 1070                    +ORD(MNEM[4])*M4) MOD OPCHTSIZE;
 1080   (*  OPC_HASH := (ORD(MNEM[1])*507 + ORD(MNEM[2])*26 + ORD(MNEM[3])
 1090                    +ORD(MNEM[4])*31) MOD OPCHTSIZE; *)
 1100   (*  OPC_HASH := (ORD(MNEM[1])*1024 + ORD(MNEM[2])*16 + ORD(MNEM[3])*2
 1110                    +ORD(MNEM[4])*32) MOD OPCHTSIZE; *)
 1120       END (*OPC_HASH*);
 1130   
 1140   PROCEDURE ENTER_OPC (NAM :  CHAR4;  OPC :  U_OPCODE);
 1150       VAR H : 0..OPCHTSIZEM1;
 1160       BEGIN
 1170       H := OPC_HASH(NAM);
 1180       WHILE OPCHASHTAB[H].OPCNAM <> '    ' DO
 1190           BEGIN
 1200           H := (H + 1) MOD OPCHTSIZE;
 1210           J := J + 1;
 1220           END;
 1230       OPCHASHTAB[H].OPCNAM := NAM;
 1240       OPCHASHTAB[H].OPC := OPC;
 1250   (*  OPCHASHTAB[H].HIT := K; *)
 1260       END (*ENTER_OPC*);
 1270   
 1280   PROCEDURE PRINT_OPC;
 1290       VAR H : 0..OPCHTSIZEM1;
 1300       BEGIN
 1310       WRITELN;
 1320       FOR H := 0 TO OPCHTSIZEM1 DO
 1330           BEGIN
 1340           WRITE (OUTPUT,H,'  ');
 1350           IF OPCHASHTAB[H].OPCNAM = '    ' THEN WRITELN ELSE
 1360               BEGIN
 1370               WRITELN (OUTPUT,OPCHASHTAB[H].OPCNAM,OPCHASHTAB[H].OPC);
 1380   (*          IF OPCHASHTAB[H].HIT = 0 THEN WRITELN ELSE
 1390                   WRITELN (OUTPUT,OPCHASHTAB[H].HIT); *)
 1400               END;
 1410           END;
 1420       END;
 1430     
 1440   BEGIN (*MAIN PROGRAM*)
 1450   K := 1000;
 1460   M1 :=128;
 1470   WHILE M1 <= MAX DO
 1480     BEGIN (* WHILE M1 <= N *)
 1490     M2 := 1;
 1500     WHILE M1 * M2 <= MAX DO
 1510       BEGIN
 1520       M3 := 1;
 1530       WHILE M1 * M2 * M3 <= MAX DO
 1540         BEGIN
 1550         M4 := 1;
 1560         WHILE ((M1 * M2 * M3 * M4 <= MAX) AND (M4 < 8)) DO
 1570           BEGIN
 1580   
 1590       FOR I := 0 TO OPCHTSIZEM1 DO
 1600           OPCHASHTAB[I].OPCNAM := '    ';
 1610       J := 0;
 1620   ENTER_OPC ('ABS ', UABS);       ENTER_OPC ('ADD ', UADD);
 1630   ENTER_OPC ('AND ', UAND);       ENTER_OPC ('BGN ', UBGN);
 1640   ENTER_OPC ('CHKF', UCHKF);      ENTER_OPC ('CHKH', UCHKH);
 1650   ENTER_OPC ('CHKL', UCHKL);      ENTER_OPC ('CHKN', UCHKN);
 1660   ENTER_OPC ('CHKT', UCHKT);      ENTER_OPC ('CHR ', UCHR);
 1670   ENTER_OPC ('CLAB', UCLAB);      ENTER_OPC ('COMM', UCOMM);
 1680   ENTER_OPC ('CSP ', UCSP);       ENTER_OPC ('CUP ', UCUP);
 1690   ENTER_OPC ('DEAD', UDEAD);      ENTER_OPC ('DEC ', UDEC);
 1700   ENTER_OPC ('DEF ', UDEF);       ENTER_OPC ('DIF ', UDIF);
 1710   ENTER_OPC ('DIV ', UDIV);       ENTER_OPC ('DMD ', UDMD);
 1720   ENTER_OPC ('DOA ', UDOA);       ENTER_OPC ('DUP ', UDUP);
 1730   ENTER_OPC ('END ', UEND);       ENTER_OPC ('ENT ', UENT);
 1740   ENTER_OPC ('EQU ', UEQU);       ENTER_OPC ('FJP ', UFJP);
 1750   ENTER_OPC ('FLO ', UFLO);       ENTER_OPC ('FLT ', UFLT);
 1760   ENTER_OPC ('GEQ ', UGEQ);       ENTER_OPC ('GRT ', UGRT);
 1770   ENTER_OPC ('IEQU', UIEQU);      ENTER_OPC ('IGEQ', UIGEQ);
 1780   ENTER_OPC ('IGRT', UIGRT);      ENTER_OPC ('ILEQ', UILEQ);
 1790   ENTER_OPC ('ILES', UILES);      ENTER_OPC ('INC ', UINC);
 1800   ENTER_OPC ('IND ', UIND);       ENTER_OPC ('INEQ', UINEQ);
 1810   ENTER_OPC ('INN ', UINN);       ENTER_OPC ('INT ', UINT);
 1820   ENTER_OPC ('IOR ', UIOR);       ENTER_OPC ('IXA ', UIXA);
 1830   ENTER_OPC ('LAB ', ULAB);       ENTER_OPC ('LCA ', ULCA);
 1840   ENTER_OPC ('LDA ', ULDA);       ENTER_OPC ('LDC ', ULDC);
 1850   ENTER_OPC ('LEQ ', ULEQ);       ENTER_OPC ('LES ', ULES);
 1860   ENTER_OPC ('LEX ', ULEX);       ENTER_OPC ('LIVE', ULIVE);
 1870   ENTER_OPC ('LOC ', ULOC);       ENTER_OPC ('LOD ', ULOD);
 1880   ENTER_OPC ('MDEF', UMDEF);      ENTER_OPC ('MOD ', UMOD);
 1890   ENTER_OPC ('MOV ', UMOV);       ENTER_OPC ('MPY ', UMPY);
 1900   ENTER_OPC ('MST ', UMST);       ENTER_OPC ('MUS ', UMUS);
 1910   ENTER_OPC ('NEG ', UNEG);       ENTER_OPC ('NEQ ', UNEQ);
 1920   ENTER_OPC ('NEW ', UNEW);       ENTER_OPC ('NOT ', UNOT);
 1930   ENTER_OPC ('NSTR', UNSTR);      ENTER_OPC ('ODD ', UODD);
 1940   ENTER_OPC ('ORD ', UORD);       ENTER_OPC ('OPTN', UOPTN);
 1950   ENTER_OPC ('PAR ', UPAR);       ENTER_OPC ('PLOD', UPLOD);
 1960   ENTER_OPC ('PSTR', UPSTR);      ENTER_OPC ('RET ', URET);
 1970   ENTER_OPC ('SGS ', USGS);       ENTER_OPC ('SQR ', USQR);
 1980   ENTER_OPC ('STO ', USTO);       ENTER_OPC ('STP ', USTP);
 1990   ENTER_OPC ('STR ', USTR);       ENTER_OPC ('SUB ', USUB);
 2000   ENTER_OPC ('SWP ', USWP);       ENTER_OPC ('SYM ', USYM);
 2010   ENTER_OPC ('TJP ', UTJP);       ENTER_OPC ('TRC ', UTRC);
 2020   ENTER_OPC ('TYP ', UTYP);       ENTER_OPC ('UJP ', UUJP);
 2030   ENTER_OPC ('UNI ', UUNI);       ENTER_OPC ('UNK ', UUNK);
 2040   ENTER_OPC ('XJP ', UXJP);       
 2050   
 2060         IF J < K THEN
 2070           BEGIN
 2080           K := J;
 2090           WRITELN (OUTPUT,M1,M2,M3,M4,K,' HITS');
 2100           IF K = 0 THEN PRINT_OPC; 
 2110           END; (* IF J < K THEN *)
 2120           M4 := M4*2;
 2130           END; (* WHILE M4 <= M3 DO *)
 2140         M3 := M3*2;
 2150         END; (* WHILE M3 <= M2 DO *)
 2160       M2 := M2*2;
 2170       END; (* WHILE M2 <= M1 *)
 2180     M1 := M1+1;
 2190     END; (* WHILE M1 < N *)
 2200   END. 

   0 ERROR(S) DETECTED

HIGHSEG:   2K +  274 WORD(S)
LOWSEG :   0K +  775 WORD(S)

RUNTIME:   0: 1. 80